import axios from 'axios'
import service from './common.js'
import {Toast} from 'vant'
// service 循环遍历输出不同的请求方法
// 创建axios实例
let instance = axios.create({
    baseURL:"http:localhost:9000/api",
    timeout:1000
})
// 创建一个对象,包裹请求方法的容器
const Http = {} ;

//循环遍历请求方法 统一请求格式和参数
for (let key in service) {
    let api = service[key] //url method
    // axios.get().then((res)=>{
    //     axios.get().then((res)=>{

    //     })
    // }).catch((err)=>{

    // })
    // async 的作用，避免多次请求掉入回调地狱
    // Http[key] = async function(){
    //     let res = null
    //     try {
    //         res = await axios.get('url')
    //     }catch(err){
    //         res = err
    //     }
    // }
    Http[key] = async function(
        params ,// 请求参数 get :url put post patch (data)
        isFormData = false, //标识是否是 form-data请求
        config = {} //配置参数
    ){
        let newParams = {}
        // content-type 是否是 form-data 的判断
        if(params && isFormData){
            newParams = new FormData()
            for (let i in params){
                newParams.append(i,params[i])
            }
        }else{
            newParams = params
        }
        // 不同请求的判断
        let response = {}//请求的返回值
        if(api.method === 'put' || api.method === 'post' || api.method === 'patch'){
            try{
                response = await instance[api.method](api.url,newParams,config)
            }catch(err){
                response = err
            }
            // delete put 请求
        }else if(api.method === 'delete'|| api.method === 'delete'){
            config.params = newParams
            try{
                response = await instance[api.method](api.url,config)
            }catch(err){
                response = err
            }
            //put请求
        }
        return response //返回响应值

    }
}

//请求拦截器的添加
instance.interceptors.request.use(config=>{
    //发起请求前需要做什么
    Toast.loading({
        mask:false, //是否有阴影
        duration:0, //一直请求
        forbidClick:true, //是否进行点击
        message:'加载中。。。'
    })
    return config
},err=>{
    //请求错误
    Toast.clear()
    Toast('请求错误，请稍后重试')
})

//响应拦截器
instance.interceptors.response.use(res=>{
    //请求成功
    Toast.clear()
    return res.data
},()=>{
    Toast.clear()
    Toast('请求失败，请稍后重试')
})